Qu'est-ce que invalid use of non-static member function ?

L'erreur "invalid use of non-static member function" se produit lorsqu'une fonction membre non statique est utilisée de manière incorrecte dans un contexte où une fonction statique est attendue.

En programmation orientée objet, une fonction membre non statique est une fonction associée à une instance spécifique d'une classe, tandis qu'une fonction membre statique est une fonction associée à la classe elle-même plutôt qu'à une instance particulière.

Lorsque vous utilisez une fonction statique, vous n'avez pas besoin d'instancier la classe pour l'appeler, vous pouvez simplement l'appeler directement en utilisant le nom de la classe. En revanche, pour appeler une fonction membre non statique, vous devez d'abord créer une instance de la classe et utiliser cette instance pour appeler la fonction.

L'erreur "invalid use of non-static member function" indique que vous êtes en train de tenter d'appeler une fonction membre non statique sans avoir créé au préalable une instance de la classe. Pour résoudre cette erreur, vous devez instancier la classe et appeler la fonction membre sur cette instance.

Voici un exemple de code pour mieux comprendre l'erreur :

class MyClass {
public:
  void myFunction() {
    // code de la fonction membre
  }

  static void myStaticFunction() {
    // code de la fonction statique
  }
};

int main() {
  MyClass::myStaticFunction(); // Appel d'une fonction statique - Pas d'erreur

  MyClass obj;
  obj.myFunction(); // Appel d'une fonction membre - Pas d'erreur

  MyClass::myFunction(); // Erreur : utilisation invalide d'une fonction membre non statique sans instance
  return 0;
}

Dans cet exemple, l'appel MyClass::myFunction() générera l'erreur "invalid use of non-static member function" car il s'agit d'une fonction membre non statique et nécessite une instance de la classe pour être appelée. L'appel MyClass::myStaticFunction() et l'appel obj.myFunction() sont corrects car ils utilisent respectivement une fonction statique et une fonction membre sur une instance existante.